跳到主要内容

34 在排序数组中查找元素的第一个和最后一个位置

https://leetcode.cn/leetbook/read/top-interview-questions-medium/xvpj16/

cost: 9m58s

class Solution {
public:
vector<int> searchRange(vector<int>& nums, int target) {
int left = 0, right = nums.size() - 1;
int start = -1, end = -1;
while (left <= right) {
int mid = left + (right - left) / 2;
int num = nums[mid];
if (num == target) {
if (mid == 0 || nums[mid - 1] < target) {
start = mid;
break;
} else {
right = mid - 1;
}
} else if (num < target) {
left = mid + 1;
} else if (num > target) {
right = mid - 1;
}
}
if (start == -1) {
return {start, end};
}
left = start;
right = nums.size() - 1;
while (left <= right) {
int mid = left + (right - left) / 2;
int num = nums[mid];
if (num == target) {
if (mid == nums.size() - 1 || nums[mid + 1] > target) {
end = mid;
break;
} else {
left = mid + 1;
}
} else if (num < target) {
left = mid + 1;
} else if (num > target) {
right = mid - 1;
}
}
return {start, end};
}
};